package ar.unsam.tp1.test

import ar.unsam.tp1.programa.Jugador
import ar.unsam.tp1.programa.Partido
import junit.framework.Assert
import org.junit.Before
import org.junit.Test
import ar.unsam.tp1.programa.Estandar
import ar.unsam.tp1.programa.Condicional
import ar.unsam.tp1.programa.Solidario
import ar.unsam.tp1.excepciones.JugadorAnotadoException
import ar.unsam.tp1.programa.Lugar

class TestJugadores {


	var Jugador pepe = new Jugador("pepe")
	var Jugador jose = new Jugador("jose")
	var Jugador tito = new Jugador("tito")
	var Jugador carlos = new Jugador("carlos")
	var Jugador juan = new Jugador("juan")
	var Jugador alberto = new Jugador("alberto")
	var Jugador rodolfo = new Jugador("rodolfo")
	var Jugador perez = new Jugador("perez")
	var Jugador julian = new Jugador("julian")
	var Jugador alfredo = new Jugador("alfredo")

    var Lugar lugar = new Lugar()
	var Partido partido = new Partido()

	@Before
	def void init() {

		pepe.setTipoDeInscripcion(new Estandar())
		jose.setTipoDeInscripcion(new Condicional())
		tito.setTipoDeInscripcion(new Solidario())
		carlos.setTipoDeInscripcion(new Estandar())
		juan.setTipoDeInscripcion(new Estandar())
		alberto.setTipoDeInscripcion(new Solidario())
		rodolfo.setTipoDeInscripcion(new Solidario())
		perez.setTipoDeInscripcion(new Solidario())
		julian.setTipoDeInscripcion(new Estandar())
		alfredo.setTipoDeInscripcion(new Condicional())
		
		partido.setLugar("Carlos Paz")
		
		lugar.setCondicionDeLugar("Villa Maipu")
		alfredo.tipoDeInscripcion.setCondicion(lugar)
		jose.tipoDeInscripcion.setCondicion(lugar)
	}

	@Test
	def void testAlta() {
		partido.alta(pepe)
		Assert::assertEquals(partido.jugadoresCandidatos.contains(pepe), true)
	}

	@Test
	def void testBaja() {
		partido.baja(pepe)
		Assert::assertEquals(partido.jugadoresCandidatos.contains(pepe), false)
	}

	@Test
	def void testInscriptos() {
		partido.alta(pepe)
		partido.alta(jose)
		partido.alta(tito)
		partido.alta(carlos)
		partido.alta(juan)
		partido.alta(alberto)
		partido.alta(rodolfo)
		partido.alta(perez)
		partido.alta(julian)
		partido.alta(alfredo)

		partido.definirJugadores

		Assert::assertEquals(partido.jugadoresCandidatos.size, 10)
		Assert::assertEquals(partido.jugadoresCandidatos.get(0), pepe)
		Assert::assertEquals(partido.jugadoresCandidatos.get(1), carlos)
		Assert::assertEquals(partido.jugadoresCandidatos.get(2), juan)
		Assert::assertEquals(partido.jugadoresCandidatos.get(3), julian)
		Assert::assertEquals(partido.jugadoresCandidatos.get(4), tito)
		Assert::assertEquals(partido.jugadoresCandidatos.get(5), alberto)
		Assert::assertEquals(partido.jugadoresCandidatos.get(6), rodolfo)
		Assert::assertEquals(partido.jugadoresCandidatos.get(7), perez)
		Assert::assertEquals(partido.jugadoresCandidatos.get(8), jose)
		Assert::assertEquals(partido.jugadoresCandidatos.get(9), alfredo)

		Assert::assertEquals(partido.jugadoresQueJueganSeguro.size, 8)
		Assert::assertEquals(partido.jugadoresCandidatos.get(0), pepe)
		Assert::assertEquals(partido.jugadoresCandidatos.get(1), carlos)
		Assert::assertEquals(partido.jugadoresCandidatos.get(2), juan)
		Assert::assertEquals(partido.jugadoresCandidatos.get(3), julian)
		Assert::assertEquals(partido.jugadoresCandidatos.get(4), tito)
		Assert::assertEquals(partido.jugadoresCandidatos.get(5), alberto)
		Assert::assertEquals(partido.jugadoresCandidatos.get(6), rodolfo)
		Assert::assertEquals(partido.jugadoresCandidatos.get(7), perez)
	}
	 
	@Test (expected=typeof(JugadorAnotadoException))
	def void testAltaRepetido() {
		partido.alta(pepe)
		partido.alta(pepe)
	}
}
